<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Object.create</title>
</head>
<body>
    <script>
        //声明一个对象
        var obj = {
            name: '汽车',
            run: function(){
                console.log('我可以行驶');
            }
        }

        //创建一个新对象 要以 obj 作为原型对象
        var changcheng = Object.create(obj, {
            //添加属性
            color: {
                //value 设置当前的属性值
                value: '红色',
                //设置属性值是否可以修改
                writable: true,
                //设置属性是否可以删除
                configurable: true,
                //设置属性是否可以枚举
                enumerable: true
            },
            //添加价格属性
            price: {
                //get 和 set 不能与 value 同时存在
                value: 'abc',
                //get 函数设置 price 的值
                //get 方法比较特殊, 它无需手动调用, 自动调用, 当获取当前对象的 price 属性的时候, 会自动执行
                //get 方法的返回值 就是当前属性的属性值
                //为对象设置一些动态属性
                get: function(){
                    // console.log('我被获取啦!!');
                    // return 66666;
                    return this.jiage;
                },
                //set 方法
                //无需手动调用, 自动会执行, 当对当前的 price 属性进行赋值的时候, 自动执行
                //set 方法还能获取赋值的『新的值』
                set: function(val){
                    // console.log('我被赋值啦!!');
                    // console.log(val);
                    //判断 val 的值是否合法, 如果合法则赋值, 如果不合法就不赋值
                    //将 val 的值保存在对象的一个属性中
                    // this 是指向新对象的
                    this.jiage = val;
                }
            }

        });
        //测试 set 方法
        // changcheng.price = "今天天气不错!";
        changcheng.price = 120000;
        console.log(changcheng.price);

        // console.log(changcheng);
        // changcheng.run();

        //测试属性修改
        // changcheng.color = '白色';
        // console.log(changcheng);

        //测试属性删除 delete 关键字
        // delete changcheng.color;
        // console.log(changcheng);
        
        //测试属性枚举 (遍历)  i 保存的内容是对象的属性名
        // for...in 循环会遍历原型对象中的『属性』
        // for(var i in changcheng){
        //     console.log(i);
        // }

        //测试 get 方法
        // console.log(changcheng.price);

        

    </script>
</body>
</html>